Skip to content

Add New Hampshire Child Care Assistance Program (CCAP)#7760

Draft
hua7450 wants to merge 9 commits intoPolicyEngine:mainfrom
hua7450:nh-ccap
Draft

Add New Hampshire Child Care Assistance Program (CCAP)#7760
hua7450 wants to merge 9 commits intoPolicyEngine:mainfrom
hua7450:nh-ccap

Conversation

@hua7450
Copy link
Collaborator

@hua7450 hua7450 commented Mar 12, 2026

Summary

Implements the New Hampshire Child Care Scholarship Program (Employment-Related) in PolicyEngine, covering eligibility, income testing, cost share, payment rates, and benefit calculation.

Closes #7759

Regulatory Authority

Eligibility Tests

Test Rule Implementation
Income <= 85% SMI He-C 6910.06(b) Monthly gross income vs hhs_smi * 0.85 / 12
TANF categorical eligibility He-C 6910.06(a)(1) is_tanf_enrolled bypasses income test
Child age < 13 He-C 6910.07(b)(3) monthly_age < child_age_limit (156 months)
Disabled child age < 18 He-C 6910.07(e) where(is_disabled, 216, 156) months
Citizenship/immigration He-C 6910.07(b)(2) 6 qualified statuses (CITIZEN, LPR, REFUGEE, ASYLEE, PAROLED_ONE_YEAR, DEPORTATION_WITHHELD)
Activity requirement He-C 6910.07(f) Reuses federal meets_ccdf_activity_test
Asset test ($1M) He-C 6910.06(f) Reuses federal is_ccdf_asset_eligible
NH residency He-C 6910.07(b)(1) Implicit via defined_for = StateCode.NH

Income

Countable income (He-C 6910.06(b),(e)): Monthly gross income from the adds pattern summing:

  • employment_income, self_employment_income, farm_income, social_security, pension_income, retirement_distributions, unemployment_compensation, workers_compensation, child_support_received, alimony_income, interest_income, dividend_income, rental_income, veterans_benefits, disability_benefits, capital_gains

Self-employment: Net income after IRS-allowable deductions (He-C 6910.06(d)).

Exclusions (He-C 6910.06(c)): TANF payments, foster care, adoption subsidies, educational assistance, grandparent income (3-generation), caretaker relative income, VISTA, dependent child student earnings, child SSI -- handled by omission from sources list.

Cost Share / Copay Schedule

Per He-C 6910.18 and Table 6910.19:

FPG Range Weekly Cost Share
<= 100% FPG $0
> 100% to <= 138% FPG $5
> 138% FPG to 85% SMI 7% of monthly income / 4.33
  • Family cost share divided equally among all eligible children (He-C 6910.18(f))
  • Monthly-to-weekly conversion: divide by 52/12 = 4.333 (He-C 6910.18(b))

Payment Rates

75th percentile of Market Rate Survey (He-C 6910.17(a)-(b)), by provider type x age category x service level.

Age categories (He-C 6910.17(i)):

  • Infant: 0-17 months
  • Toddler: 18-35 months
  • Preschool: 36-78 months
  • School Age: 79-155 months

Service levels (He-C 6910.03):

  • Full-time: > 30 hours/week
  • Half-time: > 15 and <= 30 hours/week
  • Part-time: 1 to <= 15 hours/week

Full-time weekly rates (MRS June 2024, 75th percentile):

Provider Type Infant Toddler Preschool School Age
Licensed Center $344 $317 $280 $236.25
Licensed Family $250 $250 $250 $200
Exempt In-Home (70% of family) derived derived derived derived
Exempt Center (50% of center) derived derived derived derived

Half-time = ~1/2 of full-time; Part-time = ~1/4 of full-time (state rounding applied).

Derived rates (He-C 6910.17(c)-(d)):

  • License-exempt in-home: 70% of licensed family rate
  • License-exempt center: 50% of licensed center rate

Disability supplement (He-C 6910.17(g)):

  • Full-time: $100/week, Half-time: $75/week, Part-time: $50/week

Benefit Calculation

Per He-C 6910.17(e):

per_child_weekly = max(0, min(weekly_charge, base_rate + disability_supplement) - per_child_cost_share)
monthly_benefit = sum_over_eligible_children(per_child_weekly * 52 / 12)

Where:

  • weekly_charge = pre_subsidy_childcare_expenses converted to weekly
  • base_rate = payment rate for provider type / age category / service level
  • per_child_cost_share = family cost share / number of eligible children

Requirements Coverage

REQ Description Status
REQ-001 Income <= 85% SMI Covered
REQ-002 TANF categorical eligibility Covered
REQ-005 Child age < 13 Covered
REQ-006 Disabled child age extension Covered
REQ-007 NH residency Covered
REQ-008 Citizenship/immigration status Covered
REQ-010 Parent activity requirement Covered
REQ-017 Asset test ($1M) Covered
REQ-020 Gross income calculation Covered
REQ-029 TANF payment exclusion Covered
REQ-030 Self-employment net income Covered
REQ-031 Step 1 -- $0/week <= 100% FPG Covered
REQ-032 Step 2 -- $5/week <= 138% FPG Covered
REQ-033 Step 3 -- 7% income > 138% FPG Covered
REQ-034 Monthly-to-weekly /4.33 conversion Covered
REQ-035 Cost share per child (equal division) Covered
REQ-037 Full-time > 30 hours/week Covered
REQ-038 Half-time > 15 to <= 30 hours/week Covered
REQ-039 Part-time 1 to <= 15 hours/week Covered
REQ-043 Age categories (4 brackets) Covered
REQ-044 Licensed center/family 75th pctile MRS Covered
REQ-045 Exempt in-home 70% of family rate Covered
REQ-046 Exempt center 50% of center rate Covered
REQ-047 Payment = min(charge, rate) - cost share Covered
REQ-048 Disability supplement $100/$75/$50 Covered

22/22 in-scope requirements covered.

Not Modeled (33 requirements)

Excluded due to being administrative, time-bound, enrollment-dependent, or requiring data not available in PolicyEngine:

  • Alternative eligibility paths: TANF-related medical assistance (REQ-003), NHEP with TANF pending (REQ-004)
  • Activity types: Job search (REQ-011), training/education (REQ-012), basic education (REQ-013), NHEP (REQ-014), mental health treatment (REQ-015), two-parent activity (REQ-016)
  • Income exclusions: 9 specific exclusions individually not modeled (REQ-021 through REQ-028) -- handled by omission from sources
  • Household composition: Assistance group rules (REQ-018), two-adult common child (REQ-019)
  • Service level adjustments: Commute time (REQ-040), school-age restriction (REQ-041), two-parent lowest hours (REQ-042)
  • Administrative: 12-month eligibility period (REQ-049), 92-day continued assistance (REQ-050), job search time limits (REQ-051), training lifetime limits (REQ-052), $50 registration fee (REQ-053), waitlist (REQ-054), absentee allotment (REQ-055)
  • Cost share: Family cap over 12 months (REQ-036)
  • Provider: Child linked to enrolled provider (REQ-009)

Test Coverage

114 test cases across 12 files:

File Cases Coverage
nh_ccap.yaml 10 Benefit formula, rate vs charge cap, cost share split, disability, floor at zero
nh_ccap_eligible.yaml 11 All 4 eligibility prongs, age boundaries, disability extension
nh_ccap_eligible_child.yaml 11 Age limits, disability, immigration, dependency
nh_ccap_income_eligible.yaml 10 Income below/above 85% SMI, TANF bypass, boundary values
nh_ccap_immigration_status_eligible_person.yaml 6 4 eligible + 2 ineligible statuses
nh_ccap_activity_eligible.yaml 7 Employed, student, disabled, non-qualifying, two-parent, child-not-affected
nh_ccap_child_age_category.yaml 10 All 4 categories, boundary ages
nh_ccap_cost_share.yaml 10 All 3 steps, FPG boundary transitions
nh_ccap_payment_rate.yaml 13 All 4 provider types, multiple age/service combos
nh_ccap_disability_supplement.yaml 4 All 3 service levels + non-disabled
nh_ccap_service_level.yaml 12 All 3 levels, boundary hours (15, 30)
integration.yaml 9 End-to-end eligibility + rates + cost share + benefit

Files Added

policyengine_us/
  parameters/gov/states/nh/dhhs/ccap/
    age_category/
      infant_max_months.yaml
      preschool_max_months.yaml
      toddler_max_months.yaml
    cost_share/
      step_1_fpg_rate.yaml
      step_2_amount.yaml
      step_2_fpg_rate.yaml
      step_3_rate.yaml
    eligibility/
      child_age_limit.yaml
      disabled_child_age_limit.yaml
      qualified_immigration_statuses.yaml
    income/
      countable_income/
        sources.yaml
      income_limit_smi_rate.yaml
    payment/
      disability_supplement/
        amount.yaml
      exempt_center_rate.yaml
      exempt_in_home_rate.yaml
      rates/
        licensed_center.yaml
        licensed_family.yaml
    service_level/
      full_time_hours.yaml
      half_time_hours.yaml
  variables/gov/states/nh/dhhs/ccap/
    eligibility/
      nh_ccap_activity_eligible.py
      nh_ccap_eligible.py
      nh_ccap_eligible_child.py
      nh_ccap_immigration_status_eligible_person.py
      nh_ccap_income_eligible.py
    payment/
      nh_ccap_disability_supplement.py
      nh_ccap_payment_rate.py
    nh_ccap.py
    nh_ccap_child_age_category.py
    nh_ccap_cost_share.py
    nh_ccap_countable_income.py
    nh_ccap_provider_type.py
    nh_ccap_service_level.py
  variables/gov/states/nh/dhhs/
    nh_child_care_subsidies.py
  tests/policy/baseline/gov/states/nh/dhhs/ccap/
    integration.yaml
    nh_ccap.yaml
    nh_ccap_activity_eligible.yaml
    nh_ccap_child_age_category.yaml
    nh_ccap_cost_share.yaml
    nh_ccap_disability_supplement.yaml
    nh_ccap_eligible.yaml
    nh_ccap_eligible_child.yaml
    nh_ccap_immigration_status_eligible_person.yaml
    nh_ccap_income_eligible.yaml
    nh_ccap_payment_rate.yaml
    nh_ccap_service_level.yaml

hua7450 and others added 2 commits March 11, 2026 20:50
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@codecov
Copy link

codecov bot commented Mar 12, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (19ec305) to head (76f3796).
⚠️ Report is 8 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##              main     #7760    +/-   ##
==========================================
  Coverage   100.00%   100.00%            
==========================================
  Files            3        14    +11     
  Lines           33       230   +197     
==========================================
+ Hits            33       230   +197     
Flag Coverage Δ
unittests 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

hua7450 and others added 7 commits March 11, 2026 22:42
- Fix broken reference URLs (gencourt.nh.us → Cornell LII) in all 31 files
- Correct school-age licensed center rates to MRS 75th percentile ($236.25)
- Correct school-age licensed family rates to MRS 75th percentile ($200)
- Add integration test with positive benefit amount end-to-end
- Add disability supplement test in benefit calculation context

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
He-C 6910.03(y) defines full-time as "greater than 30 hours" (not >= 30).
He-C 6910.03(aa) defines half-time as "greater than 15 hours" (not >= 15).
Fix operators and update 4 boundary test cases.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add nh_ccap_activity_eligible tests (7 cases: employed, student,
  disabled, non-qualifying, two-parent, child-not-affected)
- Fix service level subsection citations: He-C 6910.07(m)/(n) → (o)
- Fix rate table section number: Table 4.4.1 → Section 4.3.2, Table 1
- Add CCDF State Plan 2025-2027 as corroborating reference to all 17
  parameter files with #page= citations
- Add amendment register (eff. 4-30-24, #13951) to all He-C titles
- Fix description verbs: defines → sets, counts → uses
- Remove explanatory text from step_2_amount description
- Fix step_2_amount period metadata: year → week
- Add reference field to nh_child_care_subsidies aggregator
- Improve income source reference to cite He-C 6910.06(b)-(c),(e)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add New Hampshire Child Care Assistance Program (CCAP)

1 participant